package com.atguigu.gmall.cart.controller;

import com.atguigu.gmall.cart.entity.CartInfo;
import com.atguigu.gmall.cart.service.CartInfoService;
import com.atguigu.gmall.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author lhh
 * @ClassName CartController
 * @date 2022 2022/12/20
 * 1、有有效时间吗？是多久？
 * 2、商品数量的限制；
 *     限制场景： 库存、优惠、普通
 *     普通：
 *       1）、任何商品单个数量不能超过200
 *       2）、购物车商品总种类不能超过200
 * 3、价格同步
 *   1）、购物车确实缓存最新价格，进行同步；
 *          懒思想：查询购物车列表的时候，再次检索一下最新价格，如果有变化就同步即可
 *   2）、购物车展示列表的时候，在查询一下价格；
 *
 * 4、其他同步：
 *    1、上下架状态同步：
 *    2、优惠信息变更同步：
 *    3、价格同步：
 *    同步xx数据的两种方式：
 *      1）、懒思想：用的时候后台再慢慢查就行； 节流
 *      2）、前端直接用的时候发请求要； 此时需要做节流；
 */
@Api(tags = "购物车模块接口")
@RestController
@RequestMapping("/api/cart")
public class CartApiController {

    @Resource
    CartInfoService cartInfoService;

    @ApiOperation(value ="查询购物车列表")
    @GetMapping("/cartList")
    public Result cartList(){
        //根据那个识别id去查询redis缓存
        //合并购物车数据
        List<CartInfo> cartInfos = cartInfoService.displayCarts();
        //String cartKey = cartInfoService.determinCartKey();
        //List<CartInfo> cartInfos=cartInfoService.cartList(cartKey);
        return Result.ok(cartInfos);
    }

    @ApiOperation(value = "修改购物车商品数量")
    @PostMapping("/addToCart/{skuId}/{num}")
    public Result updateItemNum(@PathVariable Long skuId,@PathVariable Integer num){
        //操作那个购物车
        String cartKey = cartInfoService.determinCartKey();
        //修改
        cartInfoService.updateItemNum(cartKey,skuId,num);
        return Result.ok();
    }

    @ApiOperation(value = "修改是否选择状态")
    @GetMapping("/checkCart/{skuId}/{check}")
    public Result updateIsCheck(@PathVariable Long skuId,@PathVariable Integer check){
        //操作那个购物车
        String cartKey = cartInfoService.determinCartKey();
        //修改是否选择状态
        cartInfoService.updateIsCheck(cartKey,skuId,check);
        return Result.ok();
    }

    @ApiOperation(value = "删除单个购物车商品")
    @DeleteMapping("deleteCart/{skuId}")
    public Result deleteCart(@PathVariable Long skuId){
        //操作那个购物车
        String cartKey = cartInfoService.determinCartKey();
        //删除
        cartInfoService.deleteCart(cartKey,skuId);
        return Result.ok();
    }
}
